1 /*
2 * File: sort1.c
3 *
4 * MATLAB Coder version : 3.1
5 * C/C++ source code generated on : 22-Apr-2021 15:09:40
6 */
7
8 /* Include Files */
9 #include "rt_nonfinite.h"
10 #include "matlabfindpeaks.h"
11 #include "sort1.h"
12 #include "sortIdx.h"
13 #include "matlabfindpeaks_emxutil.h"
14 #include "nonSingletonDim.h"
15
16 /* Function Declarations */
17 static void b_sort(emxArray_real_T *x, int dim, emxArray_int32_T *idx);
18
19 /* Function Definitions */
20
21 /*
22 * Arguments : emxArray_real_T *x
23 * int dim
24 * emxArray_int32_T *idx
25 * Return Type : void
26 */
27 static void b_sort(emxArray_real_T *x, int dim, emxArray_int32_T *idx)
28 {
29 int i5;
30 emxArray_real_T *vwork;
31 int vstride;
32 int x_idx_0;
33 int j;
34 emxArray_int32_T *iidx;
35 if (dim <= 1) {
36 i5 = x->size[0];
37 } else {
38 i5 = 1;
39 }
40
41 emxInit_real_T(&vwork, 1);
42 vstride = vwork->size[0];
43 vwork->size[0] = i5;
44 emxEnsureCapacity((emxArray__common *)vwork, vstride, (int)sizeof(double));
45 x_idx_0 = x->size[0];
46 vstride = idx->size[0];
47 idx->size[0] = x_idx_0;
48 emxEnsureCapacity((emxArray__common *)idx, vstride, (int)sizeof(int));
49 vstride = 1;
50 x_idx_0 = 1;
51 while (x_idx_0 <= dim - 1) {
52 vstride *= x->size[0];
53 x_idx_0 = 2;
54 }
55
56 j = 0;
57 emxInit_int32_T(&iidx, 1);
58 while (j + 1 <= vstride) {
59 for (x_idx_0 = 0; x_idx_0 + 1 <= i5; x_idx_0++) {
60 vwork->data[x_idx_0] = x->data[j + x_idx_0 * vstride];
61 }
62
63 sortIdx(vwork, iidx);
64 for (x_idx_0 = 0; x_idx_0 + 1 <= i5; x_idx_0++) {
65 x->data[j + x_idx_0 * vstride] = vwork->data[x_idx_0];
66 idx->data[j + x_idx_0 * vstride] = iidx->data[x_idx_0];
67 }
68
69 j++;
70 }
71
72 emxFree_int32_T(&iidx);
73 emxFree_real_T(&vwork);
74 }
75
76 /*
77 * Arguments : emxArray_real_T *x
78 * Return Type : void
79 */
80 void c_sort(emxArray_real_T *x)
81 {
82 int dim;
83 int i6;
84 emxArray_real_T *vwork;
85 int j;
86 int vstride;
87 int k;
88 emxArray_int32_T *b_vwork;
89 dim = nonSingletonDim(x);
90 if (dim <= 1) {
91 i6 = x->size[0];
92 } else {
93 i6 = 1;
94 }
95
96 emxInit_real_T(&vwork, 1);
97 j = vwork->size[0];
98 vwork->size[0] = i6;
99 emxEnsureCapacity((emxArray__common *)vwork, j, (int)sizeof(double));
100 vstride = 1;
101 k = 1;
102 while (k <= dim - 1) {
103 vstride *= x->size[0];
104 k = 2;
105 }
106
107 j = 0;
108 emxInit_int32_T(&b_vwork, 1);
109 while (j + 1 <= vstride) {
110 for (k = 0; k + 1 <= i6; k++) {
111 vwork->data[k] = x->data[j + k * vstride];
112 }
113
114 b_sortIdx(vwork, b_vwork);
115 for (k = 0; k + 1 <= i6; k++) {
116 x->data[j + k * vstride] = vwork->data[k];
117 }
118
119 j++;
120 }
121
122 emxFree_int32_T(&b_vwork);
123 emxFree_real_T(&vwork);
124 }
125
126 /*
127 * Arguments : emxArray_real_T *x
128 * emxArray_int32_T *idx
129 * Return Type : void
130 */
131 void sort(emxArray_real_T *x, emxArray_int32_T *idx)
132 {
133 int i4;
134 i4 = nonSingletonDim(x);
135 b_sort(x, i4, idx);
136 }
137
138 /*
139 * File trailer for sort1.c
140 *
141 * [EOF]
142 */
143
|